/*
 * SisAP - Sistema de Alocacao de Professores
 *
 * Copyright (C) 2011  Macambira Team.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */
package com.googlecode.persistence;

import com.googlecode.entity.Curso;
import com.googlecode.conection.ConectaDB;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 * Classe responsavel por fazer a persistencia com o banco de dados do curso
 *
 * @version 0.1 03 dec 2011
 * @author Jafet
 */
public class CursoDAO {
    private static CursoDAO cursoDAO;
        
    public static CursoDAO getInstance() {
            synchronized (CursoDAO.class) {
                if (cursoDAO == null) {
                    cursoDAO = new CursoDAO();
                }
            }
            return cursoDAO;
        }
    public void CadastrarCurso (Curso curso) throws ClassNotFoundException, SQLException {
        PreparedStatement ps;
        try {
            Connection con = (Connection) ConectaDB.getInstance().getCon();
            ps = (PreparedStatement) con.prepareStatement("INSERT INTO cursos"
                    + "(idCurso, nome)"
                    + "VALUES (?,?)");
            ps.setString(1, curso.getId());
            ps.setString(2, curso.getNome());
            ps.execute();
            con.close();
            JOptionPane.showMessageDialog(null, "Cadastro realizado com Sucesso");
        }catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Professor não pode ser cadastrado");
            throw new RuntimeException(e);
        }
    }
    public void RemoverCursoId (String idCurso) throws ClassNotFoundException, SQLException {
        PreparedStatement ps;
        try {
        Connection con = (Connection) ConectaDB.getInstance().getCon();
        ps = (PreparedStatement) con.prepareStatement("DELETE FROM cursos WHERE ='" + idCurso + "'");
        ps.execute();
        con.close();
        JOptionPane.showMessageDialog(null, "Removido com sucesso");
      } catch(SQLException e) {
          JOptionPane.showMessageDialog(null, "Curso não pode ser removido");
          throw new RuntimeException(e);
      }
    }
        public void RemoverCursoNome (String nomeCurso) throws ClassNotFoundException, SQLException {
        PreparedStatement ps;
        try {
        Connection con = (Connection) ConectaDB.getInstance().getCon();
        ps = con.prepareStatement("DELETE FROM cursos WHERE ='" + nomeCurso + "'");
        ps.execute();
        ps.close();
        JOptionPane.showMessageDialog(null, "Removido com sucesso");
      } catch(SQLException e) {
          JOptionPane.showMessageDialog(null, "Curso não pode ser removido");
          throw new RuntimeException(e);
      }
    }
    public void EditarCurso (Curso curso) throws ClassNotFoundException, SQLException {
        PreparedStatement ps;
        try {
            Connection con = (Connection) ConectaDB.getInstance().getCon();
            ps = (PreparedStatement) con.prepareStatement("UPDATE cursos nome = ? WHERE idCurso = ?");
            ps.setString(1, curso.getNome());
            ps.setString(2, curso.getId());
            ps.execute();
            con.close();
            JOptionPane.showMessageDialog(null, "Alteração Realizada");
        } catch(SQLException e) {
            JOptionPane.showMessageDialog(null, "Alteração não foi realizada");
            throw new RuntimeException(e);
        }
    }
    public Curso ConsultaCursoId (String idCurso) throws ClassNotFoundException, SQLException {
        ResultSet rs;
        PreparedStatement ps;
        Curso c = new Curso();
        try {
            Connection con = (Connection) ConectaDB.getInstance().getCon();
            ps = (PreparedStatement) con.prepareStatement("SELECT * FROM cursos WHERE idCurso = ?");
            ps.setString(1, idCurso);
            rs = ps.executeQuery();
            while(rs.next()){
                c.setId(rs.getString("idCurso"));
                c.setNome(rs.getString("nome"));
            }
            con.close();
        } catch(SQLException e) {
            JOptionPane.showMessageDialog(null, "Não pode ser encontrado");
            throw new RuntimeException(e);
        }
        return c;
    }
    public Curso ConsultaCursoNome (String nomeCurso) throws ClassNotFoundException, SQLException {
        ResultSet rs;
        PreparedStatement ps;
        Curso c = new Curso();
        try {
            Connection con = (Connection) ConectaDB.getInstance().getCon();
            ps = con.prepareStatement("SELECT * FROM cursos WHERE nome = ?");
            ps.setString(1, nomeCurso);
            rs = ps.executeQuery();
            while(rs.next()){
                c.setId(rs.getString("idCurso"));
                c.setNome(rs.getString("nome"));
            }
            ps.close();
        } catch(SQLException e) {
            JOptionPane.showMessageDialog(null, "Não pode ser encontrado");
            throw new RuntimeException(e);
        }
        return c;
    }
    
    public List<Curso> ConsultaTodosCursos () {
        List<Curso> cursos = new LinkedList<Curso>();
        ResultSet rs;
        PreparedStatement ps;
        Curso c = new Curso();
        try {
            Connection con = (Connection) ConectaDB.getInstance().getCon();
            ps = con.prepareStatement("SELECT * FROM cursos");
            //ps.setString(1, nomeCurso);
            rs = ps.executeQuery();
            while(rs.next()){
                c.setId(rs.getString("idCurso"));
                c.setNome(rs.getString("nome"));
                cursos.add(c);
            }
            ps.close();
            return cursos;
        } catch(Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Não pode ser encontrado");
        }
        return null;
    }
}
